/* action 模块, 通过 mutation 间接更新状态信息 */

// 引入需要使用的接口
// 这里不指定的话是直接引入 index.js 中的内容嘛? 
import {
    reqAddress,
    reqFoodCategorys,
    reqSearchShops,
    reqShopGoods,
    reqShopInfo,
    reqShopRatings,
    reqShops,
    reqUserinfo,
} from '../api'

// 引入需要的常量信息
import {
    CLEAR_SHOP_CART,
    DECREMENT_FOOD_COUNT,
    INCREMENT_FOOD_COUNT,
    RECEIVE_ADDRESS,
    RECEIVE_CATEGORYS,
    RECEIVE_GOODS,
    RECEIVE_INFO,
    RECEIVE_RATINGS,
    RECEIVE_SHOPS,
    RECEIVE_USER_INFO,
    RESET_USER_INFO,
    SEARCH_SHOP_KEYWORD,
} from './mutation-types'

export default {
    // 异步接受请求, 这个异步接受请求是个什么意思? 
    /*
        这里对这个异步还是有一些疑惑的 , 毕竟这个东西应该算是同步吧
        async 与 await 如果没有记错, 是处理同步请求的方式之一 
     */
    async getAddress({ commit, state }) {
        // 纬度 经度 
        const { latitude, longitude } = state
        // 发送请求, 进行数据接受
        const result = await reqAddress(latitude + "," + longitude)
        commit(RECEIVE_ADDRESS, { address: result.data })
    },
    async getCategorys({ commit }) {
        // 发送请求, 进行数据接受
        const result = await reqFoodCategorys()
        // console.log(result);
        commit(RECEIVE_CATEGORYS, { categorys: result.data })
    },
    async getShops({ commit, state }) {
        // 纬度 经度 
        const { latitude, longitude } = state
        // 发送请求, 进行数据接受
        const result = await reqShops(latitude, longitude)
        // console.log("shops", result);
        commit(RECEIVE_SHOPS, { shops: result.data })
    },
    // 保存登录用户信息
    async saveUserInfo({ commit }, userInfo) {
        commit(RECEIVE_USER_INFO, { userInfo })
    },
    // 同步获取用户信息
    async getUserInfo({ commit }) {
        const result = await reqUserinfo()
        console.log(result);
        if (result.code === 0) {
            const userInfo = result.data
            commit(RECEIVE_USER_INFO, { userInfo })
        }
    },
    // 重置用户信息
    resetUserInfo({ commit }) {
        commit(RESET_USER_INFO)
    },
    // 异步获取商家信息
    async getShopInfo({ commit }, cb) {
        const result = await reqShopInfo()
        if (result.code === 0) {
            const info = result.data
            commit(RECEIVE_INFO, { info })
            // 如果组件中传递了接收消息的回调函数, 数据更新后, 调用回调通知调用的组件
            cb && cb()
        }
    },
    // 异步获取商品数组
    async getShopGoods({ commit }, cb) {
        const result = await reqShopGoods()
        if (result.code === 0) {
            const goods = result.data
            commit(RECEIVE_GOODS, { goods })

            cb && cb()
        }
    },
    // 异步获取评价信息
    async getShopRatings({ commit }, cb) {
        const result = await reqShopRatings()
        console.log("shop ratings");
        if (result.code === 0) {
            const ratings = result.data
            commit(RECEIVE_RATINGS, { ratings })

            cb && cb()
        }
    },
    // 更新指定 food 的 count 
    updateFoodCount({ commit }, { isAdd, food }) {
        if (isAdd) {
            commit(INCREMENT_FOOD_COUNT, { food })
        } else {
            commit(DECREMENT_FOOD_COUNT, { food })
        }

    },
    // 清空购物车
    clearShopCart({ commit }) {
        commit(CLEAR_SHOP_CART)
    },
    // 根据关键字获取商家信息
    async searchShops({ commit , state }, keyword) { /* keyword */
        const {latitude , longitude} = state
        const geohash = latitude + "," + longitude
        // console.log(keyword);
        // 调用接口
        let result = await reqSearchShops(keyword, geohash)
        if (result.code === 0) {
            const searchShops = result.data
            // console.log(searchShops);
            commit(SEARCH_SHOP_KEYWORD , {searchShops})
            // cb && cb()
        }
    }
}
